home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib11.dsk / PRICE DEMO.bas < prev    next >
BASIC Source File  |  2023-02-26  |  5KB  |  129 lines

  1. 1  REM  **********************
  2. 2  REM  *     PRICE DEMO     *
  3. 3  REM  *   BY CHRIS EXNER   *
  4. 4  REM  * COPYRIGHT (C) 1982 *
  5. 5  REM  * BY MICRO-SPARC INC *
  6. 6  REM  * LINCOLN, MA. 01773 *
  7. 7  REM  **********************
  8. 100  TEXT :D$ =  CHR$(4)
  9. 200  PRINT D$"OPEN PRICE LIST,L40"
  10. 300  ONERR  GOTO 20000
  11. 400  PRINT D$"READ PRICE LIST,R0"
  12. 450  INPUT RCDCTR
  13. 500  POKE 216,0: PRINT D$
  14. 600  REM  *** DISPLAY MENU OF CHOICES
  15. 700  HOME : PRINT  TAB( 10);"**  MAIN MENU  **"
  16. 800  VTAB 7: PRINT "1. ENTER A PRICE RECORD"
  17. 900  VTAB 9: PRINT "2. FIND A PRICE RECORD"
  18. 1000  VTAB 11: PRINT "3. EXIT PROGRAM"
  19. 1100  PRINT D$: VTAB 15: INPUT "YOUR CHOICE: ";C
  20. 1200  IF C = 1  THEN  GOSUB 2000: GOTO 700
  21. 1300  IF C = 2  THEN  GOSUB 7000: GOTO 700
  22. 1400  IF C < >3  THEN  GOTO 1100
  23. 1500  PRINT D$"CLOSE PRICE LIST"
  24. 1600  END 
  25. 2000  REM  *** ENTER A PRICE RECORD
  26. 2100  HOME : PRINT  TAB( 10);"** ENTER A RECORD **"
  27. 2200  VTAB 7: INPUT "ENTER ITEM NAME: ";NAME$
  28. 2300  IF  LEN(NAME$) = 0  OR  LEN(NAME$) >20  THEN 2200
  29. 2400  VTAB 9: INPUT "ENTER ITEM PRICE: ";PRICE$
  30. 2500  IF  LEN(PRICE$) = 0  OR  LEN(PRICE$) >10  THEN 2400
  31. 2600  VTAB 22: INPUT "ANY CORRECTIONS?(Y/N) ";ANS$
  32. 2700  IF ANS$ < >"Y"  AND ANS$ < >"N"  THEN 2600
  33. 2800  IF ANS$ = "Y"  THEN  GOTO 2100
  34. 2900  GOSUB 8000: REM  FIND ROUTINE
  35. 3000  IF FOUND = 0  THEN  GOTO 4000
  36. 3100  REM  *** RE-WRITE RECORD
  37. 3200  PRINT D$"WRITE PRICE LIST,R";PTR
  38. 3300  PRINT NAME$: PRINT PRICE$: PRINT BPTR: PRINT FPTR
  39. 3400  REM  *** CONTINUE ENTERING RECORD?
  40. 3500  PRINT D$: VTAB 22: INPUT "ENTER ANOTHER RECORD?(Y/N) ";ANS$
  41. 3600  IF ANS$ < >"Y"  AND ANS$ < >"N"  THEN 3500
  42. 3700  IF ANS$ = "Y"  THEN 2100
  43. 3800  RETURN 
  44. 4000  REM  *** ENTER A NEW RECORD
  45. 4100  REM  *** UPDATE THE RECORD COUNTER IN THE HEADER (0) RECORD
  46. 4200  PRINT D$"READ PRICE LIST,R0"
  47. 4300  INPUT RCDCTR
  48. 4400 RCDCTR = RCDCTR +1
  49. 4500  PRINT D$"WRITE PRICE LIST,R0"
  50. 4600  PRINT RCDCTR
  51. 4700  REM  *** WRITE NEW RECORD
  52. 4800  PRINT D$"WRITE PRICE LIST,R";RCDCTR
  53. 4900  PRINT NAME$: PRINT PRICE$: PRINT WBPTR: PRINT WFPTR
  54. 5000  REM  *** UPDATE POINTERS OF THE RECORDS BETWEEN WHICH THE NEW RECORD FITS
  55. 5100  IF WBPTR = 0  THEN  GOTO 5600
  56. 5200  PRINT D$"READ PRICE LIST,R";WBPTR
  57. 5300  INPUT N$,P$,B,F
  58. 5400  PRINT D$"WRITE PRICE LIST,R";WBPTR
  59. 5500  PRINT N$: PRINT P$: PRINT B: PRINT RCDCTR
  60. 5600  IF WFPTR = 0  THEN  GOTO 6100
  61. 5700  PRINT D$"READ PRICE LIST,R";WFPTR
  62. 5800  INPUT N$,P$,B,F
  63. 5900  PRINT D$"WRITE PRICE LIST,R";WFPTR
  64. 6000  PRINT N$: PRINT P$: PRINT RCDCTR: PRINT F
  65. 6100  REM  *** UPDATE THE ALPHA INDEX RECORD
  66. 6200 NUM =  ASC( LEFT$(NAME$,1)) -64
  67. 6210  IF NUM <0  THEN NUM = 27
  68. 6220  IF NUM >26  THEN NUM = 28
  69. 6300  PRINT D$"WRITE PRICE LIST,R";NUM
  70. 6400  PRINT RCDCTR
  71. 6500  GOTO 3500: REM  ASK 'ENTER ANOTHER RECORD' QUESTION
  72. 7000  REM  *** FIND A PRICE RECORD
  73. 7100  HOME : PRINT  TAB( 10);"** FIND A PRICE RECORD **"
  74. 7200  VTAB 7: INPUT "ENTER ITEM NAME: ";NAME$
  75. 7300  GOSUB 8000: REM  FIND A RECORD ROUTINE
  76. 7400  PRINT D$: IF FOUND = 0  THEN  VTAB 10: PRINT "(RECORD NOT FOUND)": GOTO 7700
  77. 7500  VTAB 10: PRINT "ITEM: ";RNAME$
  78. 7600  VTAB 12: PRINT "PRICE: ";RPRICE$
  79. 7700  VTAB 22: INPUT "FIND ANOTHER RECORD?(Y/N) ";ANS$
  80. 7800  IF ANS$ < >"Y"  AND ANS$ < >"N"  THEN  GOTO 7700
  81. 7850  IF ANS$ = "Y"  THEN  GOTO 7100
  82. 7900  RETURN 
  83. 8000  REM  ** FIND RECORD ROUTINE
  84. 8010  REM  ** BPTR IS BACKWARD PTR
  85. 8020  REM  ** FPTR IS FORWARD PTR
  86. 8050 FOUND = 0:WBPTR = 0:WFPTR = 0
  87. 8060  IF RCDCTR <29  THEN  RETURN 
  88. 8070 L =  LEN(NAME$)
  89. 8100  REM  *** READ APPROPRIATE INDEX RECORD
  90. 8200 NUM =  ASC( LEFT$(NAME$,1)) -64
  91. 8250  IF NUM <1  THEN NUM = 27
  92. 8275  IF NUM >26  THEN NUM = 28
  93. 8300  PRINT D$"READ PRICE LIST,R";NUM
  94. 8400  INPUT PTR
  95. 8450  IF PTR = 0  THEN PTR = RCDCTR
  96. 8600  REM  *** READ RECORDS UNTIL KEY MATCH IS MADE, OR POSITION WHERE RECORD SHOULD BE IS DETERMINED.
  97. 8700  PRINT D$"READ PRICE LIST,R";PTR
  98. 8800  INPUT RNAME$,RPRICE$,BPTR,FPTR
  99. 8900  IF  LEFT$(RNAME$,L) = NAME$  THEN FOUND = 1: RETURN 
  100. 9000  IF  LEFT$(RNAME$,L) <NAME$  THEN  GOTO 9300
  101. 9100 WFPTR = PTR: IF WBPTR < >0  OR BPTR = 0  THEN  RETURN 
  102. 9200 PTR = BPTR: GOTO 8600
  103. 9300 WBPTR = PTR: IF WFPTR < >0  OR FPTR = 0  THEN  RETURN 
  104. 9400 PTR = FPTR: GOTO 8600
  105. 20000  REM  *** CREATE A NEW FILE.
  106. 20010  REM  RECORD 0 CONTAINS
  107. 20020  REM  THE NUMBER OF RECORDS
  108. 20030  REM  IN THE FILE.
  109. 20040  REM  RECORD 1-28 ARE THE
  110. 20050  REM  INDEX CONTAINING
  111. 20060  REM  THE RECORD POINTERS TO
  112. 20070  REM  RECORDS OF THE APPROPRIATE
  113. 20080  REM  KEY.  INDEX RECORD 1 POINTS
  114. 20090  REM  TO A RECORD WHOSE KEY
  115. 20100  REM  BEGINS WITH "A"; INDEX 2
  116. 20110  REM  POINTS TO A "B" RECORD ETC.
  117. 20120  REM  RECORD 29 AND UP ARE
  118. 20130  REM  DATA RECORDS.
  119. 20200  PRINT D$"CLOSE PRICE LIST"
  120. 20250  HOME : VTAB 7: PRINT "CREATING PRICE LIST..."
  121. 20300  PRINT D$"OPEN PRICE LIST,L40"
  122. 20400  FOR I = 1 TO 28
  123. 20500  PRINT D$"WRITE PRICE LIST,R";I
  124. 20600  PRINT 0
  125. 20700  NEXT I
  126. 20750 RCDCTR = 28
  127. 20800  PRINT D$"WRITE PRICE LIST,R0"
  128. 20900  PRINT RCDCTR
  129. 21000  GOTO 500: REM  RETURN TO MAIN MENU